#pragma once

#include "Component.h"

namespace game_engine { namespace components
{

typedef enum 
{
    MUSIC,
    EFFECT
} AudioType;

/*!
 * \class AudioSource
 * \brief 
 */
class AudioSource : public Component
{
///////////////////////////////////////////////////////////////////////////////
// Attribute definition
///////////////////////////////////////////////////////////////////////////////
private:
    string sourceName;
    string audioFile;
    AudioType audioType;
    bool loop;
    FLOAT32 volume;
    bool mute;

///////////////////////////////////////////////////////////////////////////////
// Method definition
///////////////////////////////////////////////////////////////////////////////
public:
    // Constructors and Destructors
    AudioSource(void);
    AudioSource(GameObject *obj, const string &name, const AudioType &t);
    virtual ~AudioSource(void);

    // Others
    void initialize(void) throw(...);
    void play(void) throw(...);
    void stop(void) throw(...);
    void pause(void) throw(...);

    // Getters
    const AudioType& getAudioType(void) const;
    const FLOAT32 getVolume(void) const;
    const BOOL getMute(void) const;

    // Setters
    void setAudioFile(const string &file);
    void setLoop(const bool l);
    void setVolume(const FLOAT32 vol);
    void setMute(const bool m);

};

}}
